package infbmobile.almacenamiento;

// Importaciones externas
import java.io.*;
import javax.microedition.rms.*;

// Importaciones internas
import infbmobile.errores.*;
import infbmobile.util.UIHerramientas;

public class Identificacion {

    // Variables de clase
    private static String numColegiado;
    private static String password;
    private static String idSesion;
    private static String dni;

    // Getters y Setters
    
    public static void setDni(String dni) {
        Identificacion.dni=dni;
    }

    public static String getDni() {
        return dni;
    }
    public static void setNumColegiado(String numColegiado) {
        Identificacion.numColegiado=numColegiado;
    }

    public static String getNumColegiado() {
        return numColegiado;
    }

    public static void setPassword(String password) {
        Identificacion.password=password;
    }

    public static String getPassword() {
        return password;
    }

    public static void setIdSesion(String idSesion) {
        Identificacion.idSesion=idSesion;
    }

    public static String getIdSesion() {
        return Identificacion.idSesion;
    }


    /**
     * Metodo estatico para cargar en las variables de clase (dni, tarjetaSanitaria, password)
     * el contenido del recordstore "configuracion"
     */
    public static boolean cargar() {
        try{
            // Abrimos o creamos el recordstore
            RecordStore rms=RecordStore.openRecordStore("identificacion",true);
            // Creacion de las variables necesarias
            byte[] byteInputData=new byte[50];
            ByteArrayInputStream inputStream;
            DataInputStream inputDataStream;
            inputStream=new ByteArrayInputStream(byteInputData);
            inputDataStream=new DataInputStream(inputStream);
            // Comprobamos si el recordstore tenia ya almacenados algunos parametros
            // para poder cargar
            boolean resultado;
            if(rms.getNumRecords()>0){
                rms.getRecord(1,byteInputData,0);
                Identificacion.numColegiado=inputDataStream.readUTF();
                Identificacion.password=inputDataStream.readUTF();
                Identificacion.dni=inputDataStream.readUTF();

                resultado=true;
            }else{
                // Si no es asi, retornamos falso (es la primera vez que se cargo la aplicacion)
                resultado=false;
            }
            // Cerramos los recursos utilizados
            rms.closeRecordStore();
            if(!resultado){
                borrar("identificacion");
            }
            inputDataStream.close();
            inputStream.close();

            // Devolvemos el resultado
            return resultado;
        }catch(Exception e){
            e.printStackTrace();
            throw new MovilException("Error: Se produjo un error en el metodo de carga (Identificacion.cargar) de los parametros de identificacion del paciente => "+e.getMessage());
        }
    }

    /**
     * Metodo estatico para establecer en el recordstore "identificacion" el valor
     * actual de las variables de clase (supuestamente recogicas desde un formulario j2me=
     */
    public static void establecer() {
        try{
             // Eliminamos el recordstore por si existiese ya previamente
            RecordStore.deleteRecordStore("identificacion");
        }catch(Exception e){}

        try{
            // Abrimos (en este contexto "creamos") el recordstore
            RecordStore rms=RecordStore.openRecordStore("identificacion",true);
            byte[] outputData;
            ByteArrayOutputStream outputStream=new ByteArrayOutputStream();
            DataOutputStream outputDataStream=new DataOutputStream(outputStream);
            
            outputDataStream.writeUTF(Identificacion.numColegiado);
            outputDataStream.writeUTF(Identificacion.password);
            outputDataStream.writeUTF(Identificacion.dni);
            // Volcamos el buffer del flujo de datos
            outputDataStream.flush();
            // Almacenamos la informacion anterior en el recordstore
            outputData=outputStream.toByteArray();
            rms.addRecord(outputData,0,outputData.length);
            // Cerramos los recursos utilizados
            rms.closeRecordStore();
            outputDataStream.close();
            outputStream.close();
        }catch(Exception e){
            e.printStackTrace();
            throw new MovilException("Error: Error en el metodo de establecimiento (Identificacion.establecer) en el rms de los parámetros de identificacion de paciente => "+e.getMessage());
        }
    }

    /**
     * Metodo estatico
     */
    public static void establecerIdSesion() {
        try{
             // Eliminamos el recordstore por si existiese ya previamente
            RecordStore.deleteRecordStore("sesion");
        }catch(Exception e){}

        try{
            // Abrimos (en este contexto "creamos") el recordstore
            RecordStore rms=RecordStore.openRecordStore("sesion",true);
            byte[] outputData;
            ByteArrayOutputStream outputStream=new ByteArrayOutputStream();
            DataOutputStream outputDataStream=new DataOutputStream(outputStream);
            outputDataStream.writeUTF(Identificacion.idSesion);
            // Volcamos el buffer del flujo de datos
            outputDataStream.flush();
            // Almacenamos la informacion anterior en el recordstore
            outputData=outputStream.toByteArray();
            rms.addRecord(outputData,0,outputData.length);
            // Cerramos los recursos utilizados
            rms.closeRecordStore();
            outputDataStream.close();
            outputStream.close();
        }catch(Exception e){
            e.printStackTrace();
            throw new MovilException("Error: Se produjo un error en el metodo de establecimiento (Identificacion.establecerIdSesion) en el rms de almacenamiento del identificador de sesion del paciente => "+e.getMessage());
        }
    }

    /**
     * Metodo estatico
     */
    public static void cargarIdSesion() {
        try{
            // Abrimos el recordstore
            RecordStore rms=RecordStore.openRecordStore("sesion",false);
            // Creacion de las variables necesarias
            byte[] byteInputData=new byte[50];
            ByteArrayInputStream inputStream;
            DataInputStream inputDataStream;
            inputStream=new ByteArrayInputStream(byteInputData);
            inputDataStream=new DataInputStream(inputStream);
            // Comprobamos si el recordstore tenia ya almacenados algunos parametros
            // para poder cargar
            boolean resultado;
            if(rms.getNumRecords()>0){
                rms.getRecord(1,byteInputData,0);
                Identificacion.idSesion=inputDataStream.readUTF();
            }
            // Cerramos los recursos utilizados
            rms.closeRecordStore();
            inputDataStream.close();
            inputStream.close();
        }catch(Exception e){
            e.printStackTrace();
            throw new MovilException("Error: Se produjo un error (Identificador.cargarIdSesion) del rms de almacenamiento del identificador de sesion del paciente => "+e.getMessage());
        }
    }

    /**
     * Metodo estatico para eliminar el registro rms pasado como parametro
     */
    public static void borrar(String rms) {
        try{
             // Eliminamos el recordstore por si existiese ya previamente
            RecordStore.deleteRecordStore(rms);
        }catch(Exception e){
            e.printStackTrace();
            throw new MovilException("Error: No se pudo eliminar el registro rms de identificacion => "+e.getMessage());
        }
    }
}
